package leetcode;

import java.util.ArrayList;
import java.util.List;

/**
 * description:
 * author:zt
 * date:2021-07-28
 */

/**
 * 给你一个含 n 个整数的数组 nums ，其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字，并以数组的形式返回结果。
 */
public class leetcode448 {
    public List<Integer> findDisappearedNumbers(int[] nums) {
        int n = nums.length;
//        boolean[] flag = new boolean[n];
//        for (int num : nums) {
//            flag[num] = true;
//        }
//        ArrayList<Integer> res = new ArrayList<>();
//        for (int i = 0; i < flag.length; i++) {
//            if (!flag[i]) res.add(i+1);
//        }
//        return res;

        //不适用额外空间
        for (int num : nums) {
            int x = (num-1)%n;
            nums[x] += n;
        }
        ArrayList<Integer> res = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            if (nums[i]<=n) res.add(i+1);
        }
        return res;
    }
}
